package algorithm7.leetcode.每日一题.YEAR2023.month5;

import org.junit.jupiter.api.Test;

import java.util.Arrays;

/**
 * @Author: permission
 * @Date: 2023/5/21 21:41
 * @Version: 1.0
 * @ClassName: DAY20230521_LCP33
 * @Description: 蓄水
 */
public class DAY20230521_LCP33 {
    public int storeWater(int[] bucket, int[] vat) {
        return handle1(bucket, vat);
    }

    private int handle1(int[] bucket, int[] vat) {
        int n = bucket.length;
        int maxk = Arrays.stream(vat).max().getAsInt();
        if (maxk == 0) {
            return 0;
        }
        int res = Integer.MAX_VALUE;
        for (int k = 1; k <= maxk && k < res; ++k) {
            int t = 0;
            for (int i = 0; i < bucket.length; ++i) {
                t += Math.max(0, (vat[i] + k - 1) / k - bucket[i]);
            }
            res = Math.min(res, t + k);
        }
        return res;
    }

    /*
    给定 N 个无限容量且初始均空的水缸，每个水缸配有一个水桶用来打水，第 i 个水缸配备的水桶容量记作 bucket[i]。小扣有以下两种操作：
        升级水桶：选择任意一个水桶，使其容量增加为 bucket[i]+1
        蓄水：将全部水桶接满水，倒入各自对应的水缸
        每个水缸对应最低蓄水量记作 vat[i]，返回小扣至少需要多少次操作可以完成所有水缸蓄水要求。
    注意：实际蓄水量 达到或超过 最低蓄水量，即完成蓄水要求。

    示例 1：
    输入：bucket = [1,3], vat = [6,8]
    输出：4

    解释：
    第 1 次操作升级 bucket[0]；
    第 2 ~ 4 次操作均选择蓄水，即可完成蓄水要求。
     */

    @Test
    void t() {
        int[] bucket = {3, 2, 5};
        int[] vat = {0, 0, 0};
        int res = storeWater(bucket, vat);
        System.out.println("res = " + res);
    }

}
